Use this function to separate chords found in symbol-patterns.
(symbol-demix 4 '(fadg ebh jafi ldbe) :sort)
--> (g = j l)
(symbol-demix 4 '(fadg ebh jafi ldbe))
--> (g = i e)
Two different approaches are possible:
- to reverse the effect of symbol-mix, thus demixing a number of symbol-patterns previously mixed together in sequence, - to extract symbol-patterns by symbol priority, thus demixing from low to high ranges of symbols.
The first approach looks at a symbol aggregate as an exploded list and selects individual symbols according to their position in that exploded list. Thus, '(abcd efgh ijkl) at pass-value 1 would produce '(a e i), at pass-value 4 '(d h l).
In a symbol-pattern that has unequal symbol aggregates the rest symbol = is substituted.
(symbol-demix 4 '(abcd efg hijk lmn))
--> (d = k =)
The second approach again explodes each symbol aggregate but sorts by symbol range rather than position. Thus, '(bfgc dhka ideb) at pass-value 1 would produce '(b a b), at pass-value 4 '(g k i).
(symbol-demix 4 '(kabf jdg hkcd ldge) :sort)
--> (k = k l)
The symbol-demix functions works particularly well with gen-variants-chord where chords are derived from a symbol melody. Here is an example:
(def-symbol
harps (gen-variants-chordt 0.34 32 4 7 '(a -b c d))